package com.michaldabski.panoramio.utils; import android.content.Context; import android.location.Address; import android.location.Geocoder; import android.os.AsyncTask; import android.text.TextUtils; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; /** * Created by Michal on 14-Sep-14. */ public class AddressResolver extends AsyncTask<Double, Void, String> { private final Context context; public AddressResolver(Context context) { this.context = context; } @Override protected String doInBackground(Double... params) { final double lat = params[0], lng = params[1]; try { Geocoder geocoder = new Geocoder(context, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); if (addresses.isEmpty()) return null; Address address = addresses.get(0); return buildAddressString(address.getAddressLine(0), address.getAddressLine(1), address.getPostalCode(), address.getAdminArea(), address.getLocality(), address.getCountryName()); } catch (Exception e) { e.printStackTrace(); return null; } } static String buildAddressString(String... parts) { StringBuilder stringBuilder = new StringBuilder(); LinkedHashSet<String> uniqueParts = new LinkedHashSet<String>(Arrays.asList(parts)); boolean first = true; for (String part : uniqueParts) if (TextUtils.isEmpty(part) == false) { if (first) first = false; else stringBuilder.append(", "); stringBuilder.append(part); } return stringBuilder.toString(); } }